package com.xuecheng.content.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.api.content.model.dto.TeachplanMediaDTO;
import com.xuecheng.common.domain.code.CommonErrorCode;
import com.xuecheng.common.domain.response.RestResponse;
import com.xuecheng.common.exception.ExceptionCast;
import com.xuecheng.content.common.constant.ContentErrorCode;
import com.xuecheng.content.convert.TeachplanMediaConvert;
import com.xuecheng.content.entity.TeachplanMedia;
import com.xuecheng.content.mapper.TeachplanMediaMapper;
import com.xuecheng.content.service.TeachplanMediaService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class TeachplanMediaServiceImpl extends ServiceImpl<TeachplanMediaMapper, TeachplanMedia> implements TeachplanMediaService {


    /**
     * 根据媒资id查询媒资是否绑定在了相关的课程计划上
     * 业务分析：
     * 1，判断关键数据的合法性：mediaId
     * 2，判断业务数据：无需判断。
     * 媒资绑定
     * @param mediaId - 媒资信息id
     * @return - 课程计划和媒资绑定信息dto
     */
    @Override
    public RestResponse<TeachplanMediaDTO> getById(Long mediaId) {
        //1,判断关键数据的合法性
        if (ObjectUtils.isEmpty(mediaId)){
            ExceptionCast.cast(ContentErrorCode.E_120110);
        }

        //根据mediaId查询课程计划和媒资的绑定信息
        LambdaQueryWrapper<TeachplanMedia> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TeachplanMedia::getMediaId,mediaId);
        TeachplanMedia teachplanMedia = this.getOne(queryWrapper);


        //判断绑定信息是否存在
        if (ObjectUtils.isEmpty(teachplanMedia)){
            //不存在，返回错误信息
            return RestResponse.validfail(ContentErrorCode.E_120111);
        }else{
            //存在
            //把po转成dto返回
            TeachplanMediaDTO dto = TeachplanMediaConvert.INSTANCE.entity2dto(teachplanMedia);
            return RestResponse.success(dto);
        }

    }


    /**
     * 根据媒资信息id删除课程计划与媒资信息绑定
     * 业务分析：
     * 0,是否开启事务
     * 1，判断关键数据
     * 2，判断业务关键数据：本操作无需判断
     * 3，操作删除
     * @param mediaId - 媒资信息id
     */
    @Override
    @Transactional
    public void removeById(Long mediaId) {
        //1,判断关键数据的合法性
        if (ObjectUtils.isEmpty(mediaId)){
            ExceptionCast.cast(ContentErrorCode.E_120110);
        }

        this.removeById(mediaId);
    }
}
